At times it may be desirable to allow applications running on a computer or computer system to share some files while restricting access to other files. For example, all the applications running on a particular machine may need to share files one through ten but perhaps only application one should have access to file eleven and only application two should have access to files twelve and thirteen. One way to accomplish this is to make several sets of the files all the applications need. That is, a first set of files might include a copy of files one through ten and file eleven for use by application one. A second set of files might include a copy of files one through ten and files twelve and thirteen for use by application two. One immediately obvious disadvantage to this approach is the additional storage space required for maintaining separate sets of files. Duplicative requirements for other system resources such as memory and paging space may also result from this approach. Another disadvantage to this approach is that when a file needs to be modified, it must be modified in both sets of files (e.g., if a new version of file one becomes available, file one in both sets of files would have to be updated).
Furthermore, it may be desirable to make the shared part of the file system read only but allow the unshared portion of the file system to be writable. For example, in the scenario described above, application one may need to create or write to file eleven and application two may need to create or write to files twelve and thirteen. Typically, however, it would be desirable to prevent application one from accessing files twelve and thirteen and to prevent application two from accessing file eleven. Embodiments of the invention address these and other needs.